﻿using Negocio;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace REAL
{
    public partial class frmAutorizacionFactura : Form
    {
        public frmAutorizacionFactura()
        {
            InitializeComponent();
        }

        private void GetProveedores()
        {
            cmbProveedor.ValueMember = "proid";
            cmbProveedor.DisplayMember = "pronombre";
            cmbProveedor.DataSource = Proveedores.FindAll();
        }

        private void frmAutorizacionFactura_Load(object sender, EventArgs e)
        {
            IniciarControles();
            GetProveedores();
            GetFacturas();
        }

        private void IniciarControles()
        {
            txtFactura.Text = string.Empty;
            groupBox2.Enabled = false;
        }

        private void GetFacturas()
        {
            var resultado = (from row in FacturasProveedor.FindAllNoAutorizadasConProveedor()
                             select new
                             {
                                 row.id,
                                 row.numero,
                                 row.fecha,
                                 row.proveedor.pronombre,
                                 row.importe,
                                 row.observaciones,
                                 row.autorizada
                             }).ToList();

            foreach(var row in resultado)
            {
                dgvFacturas.Rows.Add(row.id, row.numero, row.fecha.ToShortDateString(), row.pronombre, row.importe, row.observaciones, row.autorizada);
            }
        }

        private void ckbAutorizadas_CheckedChanged(object sender, EventArgs e)
        {
            if(ckbAutorizadas.CheckState == CheckState.Checked)
            {
                dgvFacturas.Rows.Clear();

                var resultado = (from row in FacturasProveedor.FindAllConProveedor()
                                 select new
                                 {
                                     row.id,
                                     row.numero,
                                     row.fecha,
                                     row.proveedor.pronombre,
                                     row.importe,
                                     row.observaciones,
                                     row.autorizada
                                 }).ToList();

                foreach (var row in resultado)
                {
                    dgvFacturas.Rows.Add(row.id, row.numero, row.fecha.ToShortDateString(), row.pronombre, row.importe, row.observaciones, row.autorizada);
                }

                dgvFacturas.Columns[4].DefaultCellStyle.Format = "c";
            }
        }

        private void dgvFacturas_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if(this.dgvFacturas.Columns[e.ColumnIndex].Name == "autorizada")
            {
                if(Convert.ToBoolean(e.Value) == false)
                {
                    dgvFacturas.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.Yellow;
                    //dgvFacturas.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.White; 
                }
            }
        }

        private void ckbFechas_CheckedChanged(object sender, EventArgs e)
        {
            if(ckbFechas.CheckState == CheckState.Checked)
            {
                groupBox2.Enabled = true;
            }
            else
            {
                groupBox2.Enabled = false;
            }
        }

        private void dgvFacturas_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if(dgvFacturas.Columns[e.ColumnIndex].Name == "autorizar")
            {
                int id = Convert.ToInt32(dgvFacturas.CurrentRow.Cells[0].Value);
                string numero = dgvFacturas.CurrentRow.Cells[1].Value.ToString();
                string fecha = dgvFacturas.CurrentRow.Cells[2].Value.ToString();
                string importe = dgvFacturas.CurrentRow.Cells[4].Value.ToString();
                string proveedor = dgvFacturas.CurrentRow.Cells[3].Value.ToString();

                frmFacturaProveedorAutorizar frm = new frmFacturaProveedorAutorizar(id, proveedor,numero,fecha,importe);
                frm.ShowDialog();
            }
        }


        private void BuscarPorNroFacturaProveedor(int proveedor_id, string factura_numero)
        {
            dgvFacturas.Rows.Clear();

            var resultado = (from row in FacturasProveedor.FindAllConProveedor()
                             where (row.proveedor_id == proveedor_id) && ((row.numero == factura_numero) || (factura_numero == string.Empty))
                             select new
                             {
                                 row.id,
                                 row.numero,
                                 row.fecha,
                                 row.proveedor.pronombre,
                                 row.importe,
                                 row.observaciones,
                                 row.autorizada
                             }).ToList();

            foreach (var row in resultado)
            {
                dgvFacturas.Rows.Add(row.id, row.numero, row.fecha.ToShortDateString(), row.pronombre, row.importe, row.observaciones, row.autorizada);
            }

            dgvFacturas.Columns[4].DefaultCellStyle.Format = "c";
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            if(ckbFechas.CheckState == CheckState.Unchecked)
            {
                BuscarPorNroFacturaProveedor(Convert.ToInt32(cmbProveedor.SelectedValue), txtFactura.Text);
            }
        }

        private void btnSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
